package com.hu.article.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hu.article.mapper.BlogMapper;
import com.hu.article.mapper.BlogPraiseMapper;
import com.hu.article.service.IBlogService;
import com.hu.common.pojo.Blog;
import com.hu.common.vo.BlogChartsVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author hu
 * @since 2023-09-07
 */
@Service
public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IBlogService {
    @Resource
    private BlogMapper blogMapper;

    @Resource
    private BlogPraiseMapper blogPraiseMapper;

    /**
     * 通过博客id增加评论数
     * @param blogId
     */
    @Override
    public void addCommentCount(Integer blogId) {
        blogMapper.addCommentCount(blogId);
    }

    /**
     * 增加阅读量
     * @param id
     */
    @Override
    public void addReadCount(Integer id) {
        blogMapper.addReadCount(id);
    }

    /**
     * 减阅读数
     * @param blogId
     * @param deletedCount
     */
    @Override
    public void reduceCommentCount(Integer blogId, int deletedCount) {
        blogMapper.reduceCommentCount(blogId, deletedCount);
    }

    /**
     * 设置博客点赞和用户id的关联信息
     * @param blogId
     * @param userId
     */
    @Override
    public void setPraise(Integer blogId, Integer userId) {
        // 将点赞信息保存至blog_praise表
        blogPraiseMapper.setPraise(blogId, userId);
        // blog表的praise加一
        blogMapper.addPraise(blogId);
    }

    // 判断当前用户是否已经点赞
    @Override
    public Boolean isPraise(Integer blogId, Integer userId) {
        // 获取blog_praise表中所有符合blogId的userId组成集合
        List<Integer> praiseList = blogPraiseMapper.isPraise(blogId);
        // 判断该集合中是否存在前端传过来的userId，如果有，则用户对该博客已经进行点赞了
        boolean contains = praiseList.contains(userId);
        return contains;
    }

    @Override
    public List<BlogChartsVo> findBlogCharts(String startTime, String endTime) {
        return blogMapper.findBlogCharts(startTime,endTime);
    }
}
